package pe.edu.sistemas.postgrado.samupg.business.service.impl.marketing;

import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import pe.edu.sistemas.postgrado.samupg.business.service.marketing.PeriodoService;
import pe.edu.sistemas.postgrado.samupg.domain.model.Periodo;
import pe.edu.sistemas.postgrado.samupg.repository.dao.PeriodoDAO;

/**
 *
 * @author Manolo
 */
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class PeriodoServiceImpl implements PeriodoService {

    @Resource
    private PeriodoDAO periodoDAO;

    @Override
    public List<Periodo> listarPeriodos() {
        return periodoDAO.listarPeriodos();
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void guardar(Periodo periodo) {
        periodoDAO.create(periodo);
    }

    @Override
    public Periodo getPeriodosxId(Integer idPeriodo) {
        return periodoDAO.getPeriodosxId(idPeriodo);
    }

    @Override
    public Periodo getPeriodoActual() {
        return periodoDAO.getPeriodoActual();

    }

    @Override
    public void cambiarEstado(boolean estado, Integer periodoId) {
        periodoDAO.cambiarEstado(estado, periodoId);
    }

    @Override
    public List<Periodo> getPeriodoActualOrig() {
        return periodoDAO.getPeriodoActualOrig();
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void actualizarPeriodo(Periodo periodo) throws DataAccessException {
        periodoDAO.actualizarPeriodo(periodo);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void guardarPeriodoActual(Periodo periodo) throws DataAccessException {
        Periodo periodoLocal = periodoDAO.getPeriodoActual();
        periodoLocal.setPeriodoActual(false);
        periodoLocal.setFechaCierre(new Date());
        periodoDAO.actualizarPeriodo(periodoLocal);
        
        periodoDAO.create(periodo);
    }
}
